console.log(typeof undefined);
console.log(typeof 12);
console.log(typeof "12");
console.log(typeof {});

// 比较特殊的
console.log(typeof null); // object
// 其实实质上Array和function都是object的子类
console.log(typeof [1, 1]);
console.log(typeof
    function () {});

console.log("-----check null--------");
var c = null;
if (!c && typeof c === "object") {
    console.log("this is a null");
}

console.log("-------undefined and undecleared--------------")
var a;
console.log(a); //只声明了，但是没有赋值，这个时候是undefined
// console.log(b);//没有定义过直接去引用，报错，这个就叫做undecleared

var myobj = {};
console.log(myobj.a); //需要注意的是对象上的字段，就算没有声明直接引用也不会报错


// 如何安全的是用全局变量？
/* 
其实就是检测undecleared，typeof可以作为一种安全的检查手段来检查undecleared，虽然说检查到的结果显示的是undefined。 
这个地方有点绕。
*/
console.log("如何安全的使用全局变量");
if (typeof b !== "undefined") {
    console.log(b);
}
if (window.b) {
    console.log(b);
}